/* ===================

AX2E (AXESCON XACML 2.0 Engine) is the Java authorization engine, which implements OASIS XACML 2.0 standard.
Copyright (C) 2007 AXESCON LLC

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA


Contact: AXESCON LLC - info{at}axescon.com

 =================== */
/*
 * XML Type:  Policy
 * Namespace: urn:oasis:names:tc:xacml:2.0:policy:schema:os
 * Java type: axescon.xacml.model.policy.Policy
 *
 * Automatically generated - do not modify.
 */
package axescon.xacml.model.policy.impl;

import axescon.xacml.model.policy.*;

import java.util.Iterator;
import java.util.Map;

/**
 * An XML Policy(@urn:oasis:names:tc:xacml:2.0:policy:schema:os).
 * <p/>
 * This is a complex type.
 */
public abstract class PolicyObjectImpl extends PolicyProxyImpl implements axescon.xacml.model.policy.PolicyObject {

    private String description;

    public boolean isSetDescription() {
        return getDescription() != null;
    }

    public void unsetDescription() {
        setDescription(null);
    }

    private Defaults policyDefaults;

    public boolean isSetDefaults() {
        return getDefaults() != null;
    }

    public void unsetDefaults() {
        setDefaults(null);
    }

    private CombinerParameters[] combinerParametersArray;

    private Target target;


    private Obligation[] obligationArray;


    private String ruleCombiningAlgId;

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Defaults getDefaults() {
        return policyDefaults;
    }

    public void setDefaults(Defaults policyDefaults) {
        this.policyDefaults = policyDefaults;
    }

    public CombinerParameters[] getCombinerParametersArray() {
        return combinerParametersArray;
    }

    public void setCombinerParametersList(CombinerParameters[] combinerParametersArray) {
        this.combinerParametersArray = combinerParametersArray;
    }

    public Target getTarget() {
        return target;
    }

    public void setTarget(Target target) {
        this.target = target;
    }


    public String getRuleCombiningAlgId() {
        return ruleCombiningAlgId;
    }

    public void setRuleCombiningAlgId(String ruleCombiningAlgId) {
        this.ruleCombiningAlgId = ruleCombiningAlgId;
    }


    public Obligation[] getObligationArray() {
        return obligationArray;
    }

    public void setObligationArray(Obligation[] obligationArray) {
        this.obligationArray = obligationArray;
    }

    private String namespacesDecls;

    public void setNamespacesDecls(Map namespaces) {
        String xqNamespace = "";
//        Iterator<Map.Entry>
        Iterator it = namespaces.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry en = (Map.Entry) it.next();
            xqNamespace += " declare namespace " + en.getKey() + "='" + en.getValue() + "'; ";
        }
        namespacesDecls = xqNamespace;
    }

    public String getNamespacesDecls() {
        return namespacesDecls;
    }

    /**
     * @param parentPolicyObject null means there's no parent, then the root is set to self
     */
    public void setParentPolicyObject(PolicyObject parentPolicyObject) {
        this.parentPolicyObject = parentPolicyObject;
        this.setRootPolicyObject(parentPolicyObject == null ? this : parentPolicyObject.getRootPolicyObject());
    }

    public String getVersion() {
        return (super.getVersion() == null ? "1.0" : super.getVersion());
    }
}
